package threading;

// 标准库中 CountDownLatch

import java.util.concurrent.CountDownLatch;

public class Demo2 {
    public static void main(String[] args) throws InterruptedException {
        // 设置选手/线程个数
        CountDownLatch count = new CountDownLatch(10);
        // 设置线程
        for (int i = 0; i < 10; i++) {
            Thread t = new Thread(() -> {
                System.out.println("开始执行任务！" + Thread.currentThread().getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("结束执行任务！ " + Thread.currentThread().getName());
                // 每个选手撞线/线程完成任务，则调用一下countDown方法
                count.countDown();
            });
            t.start();
        }
        // 进行阻塞等待,会等到所有的选手/线程都完成任务之后才解除阻塞！！！
        count.await();

        System.out.println("任务完全结束！");
    }
}

// 最后的结果会发现：开始顺序与结束顺序的到达是不一样的
// 况且 ：如果没有sleep或者sleep时间过短就可能会发生又有开始又有结束，而不是先开始再结束

// 调度是随机的
